DruckManager von Patrick Ohly Inhaltsverzeichnis: 1. Einleitung 2. Bedienung 2.1. Starten 2.2. Das Config-File 2.3. Das Fenster von DruckManager 2.4. Menus, Gadgets, Commodity 2.5. Entfernen 3. Features von DruckManager 3.1. Input 3.2. Puffer 3.3. Output 3.4. Drucker-Kommandos 1. Einleitung DruckManager ist ein Tool, das die Arbeit mit einem Drucker flexibler und kontrollierbarer macht. Er arbeitet mit jedem beliebigen Anwenderprogramm zusammem, solange es seine Daten über das Parallel- und/oder Seriell-Device ausgibt. DruckManager kann Daten, die ein Programm an den Drucker schickt, zunächst im RAM oder in einem File puffern. So wird ein Anwenderprogramm nicht durch den langsameren Drucker aufgehalten. Die Daten können jedoch auch wie bei "CMD" zusätzlich noch umgeleitet werden. Falls Sie feststellen, daß ein Programm nicht das ausdruckt, was Sie wollten, können Sie den Druck sofort abbrechen, die gepufferten Daten löschen und/oder neu eintreffende Daten sofort ins "Nirwana" schicken. Sie können die Daten aber auch wie bisher sofort zum Drucker schicken. Damit Sie jederzeit einen Überblick darüber haben, wieviel Daten gepuffert sind, bekommen Sie in grafischer Form und exakt ausgeschrieben die Menge der gepufferten Daten sowie den Anteil davon, der gerade gedruckt wird, angezeigt. Eine weiteres Feature von DruckManager ist die Möglichkeit, beliebig viele, frei einstellbare Drucker-Kommandos an den Drucker zu schicken. Diese Drucker-Kommandos können auch eine Variable enthalten, die von DruckManager in einem String-Gadget jeweils neu abgefragt wird. Bei der Entwicklung von DruckManager wurde großer Wert auf die Benutzerfreundlichkeit gelegt. Außerdem soll DruckManager unter jedem Betriebssystem laufen. DruckManager bietet eine dreidimensionale Benutzeroberfläche und die neuen Gadget-Arten von OS 2.0 auch unter 1.3 mit der PD-Library "Intuisup" von Thorsten Jürgeleit. Dabei wird als besonderes Feature für alle Texte immer der voreingestellte Zeichensatz verwendet und die Größe des Fensters und der Gadgets entsprechend angepaßt. Unter 2.0 und höher nutzt DruckManager Features dieser Betriebsystem-Versionen: DruckManager installiert sich als Commodity und kann damit von "Exchange" aus ferngesteuert werden. Public-Screens werden unterstützt, indem DruckManager sein Fenster immer auf dem obersten Screen öffnet, falls dies ein Public-Screen ist, oder einen bestimmten Public-Screen verwendet. Die Asl-Library wird verwendet, während unter 1.3 auf die "ReqTools-Library" von Nico Francois ausgewichen wird. 2. Bedienung DruckManager unterstützt eigentlich nur die Umleitung der Daten an einen Drucker, da in den meisten Fällen an einen Amiga nur ein Drucker angeschlossen ist. Falls Sie aber doch sowohl an der seriellen als auch an der parallelen Schnittstelle einen Drucker angeschlossen haben, können Sie DruckManager auch zweimal starten, einmal für jeden Port. 2.1. Starten DruckManager kann vom CLI oder von der Workbench aus gestartet werden. Die Argumente werden in beiden Fällen wie bei einem Commodity angegeben. Ob die Groß- und Kleinschreibung der Schlüsselwörter unterschieden wird, hängt von Ihrer Betriebssystemversion ab. Zumindest unter 1.3 müssen die Schlüsselwörter groß geschrieben werden, damit sie von DruckManager erkannt werden, also "DEVICE" und nicht "Device" oder "device". Wenn DruckManager zum ersten Mal gestartet wird, können (müssen jedoch nicht) folgende Argumente angegeben werden: - DEVICE=parallel.device/seriell.device Dies ist das zu puffernde Device. Es werden jeweils die Standard-Units mit der Nummer 0 verwendet. Voreingestellt ist parallel.device. - CONFIG=filename Dabei ist "filename" ein Config-File wie unter 2.2. beschrieben. Wird CONFIG nicht angegeben, so sind keine Drucker-Kommandos möglich. - INPUT=BUFFER/NIL/PRINT Mit diesem Argument wählen Sie die Einstellung für die eingehenden Druckerdaten (siehe auch 3.1.). Voreingestellt ist BUFFER. - CMD=filename "filename" ist eine Datei, in die alle eingehenden Daten kopiert werden sollen, unabhängig von der Einstellung bei INPUT (s.a. 3.1.). - BUFFER=RAM/dirname Durch BUFFER wird bestimmt, ob die Daten im RAM gepuffert werden sollen oder auf Diskette. "dirname" gibt dabei das Ver- zeichnis an, in dem die temporären Files angelegt werden sol- len. Voreingestellt ist RAM, aber Sie sollten doch besser ein Verzeichnis wählen, weil das RAM u.U. sehr schnell aufgebraucht werden könnte. - PAUSE=YES/NO/JA/NEIN Damit können Sie das Drucken der Daten im Puffer stoppen, ohne daß Daten verloren gehen. Voreingestellt ist NEIN. - DELAY=num Wenn am Parallel-Port gedruckt wird, überprüft DruckManager, ob der Drucker Papier hat und Online-geschaltet ist. Wenn dies für die hiermit einstellbaren "num" Sekunden nicht der Fall ist, erscheint der in 3.3. be- schriebene Requester. Für den seriellen Port wird dieses Argument igno- riert, da hier der Zustand des Druckers nicht feststellbar ist. Voreingestellt sind 30 Sekunden. - CX_POPUP=YES/NO/JA/NEIN Falls CX_POPUP gleich YES/JA ist, wird das Fenster sofort geöff- net. Voreingestellt ist JA. Folgenden Argumente betreffen die Commodity-Eigenschaften von DruckManager und werden unter 1.3 ignoriert: - CX_POPKEY=Tastenbeschreibung Diese Tastenkombination wird als PopKey des Commodities ver- wendet. Voreingestellt ist "control alt p" für den parallelen Port und "control alt s" für den seriellen. - CX_PRIORITY=num Dies ist die Priorität des Commodities. Voreingestellt ist -5. Ebenfalls nur unter 2.0 werden folgende Argumente beachtet: - PUBSCREEN=name Auf dem Public-Screen mit dem Namen "name" öffnet DruckManager beim ersten Mal sein Fenster. Wenn er nicht vorhanden ist, wird er mit den Einstellungen der Workbench geöffnet und geschlossen, wenn das Fenster geschlossen wird. Sollte dann der Screen noch nicht geschlossen werden können, weil ein anderes Programm dort ein Fenster geöffnet hat, erscheint eine entsprechende Meldung. Es kann dann noch einmal versucht werden, den Screen zu schließen, oder den Screen ge- öffnet zu lassen. Der Versuch, den Screen zu schließen, wird bei jedem Fenster-Schließen und bei Programmende wiederholt. - USEPUBSCREEN=YES/NO/JA/NEIN Mit diesem Argument wird bestimmt, ob das Fenster immer auf dem mit "PUBSCREEN=name" bestimmten Public-Screen geöffnet werden soll. Wird "NO", bzw. "NEIN" angegeben, dann benutzt Print- Manager diesen Screen nur beim Programmstart und später immer den obersten Screen. Voreingestellt ist NEIN. Wenn DruckManager gestartet wurde, nachdem er bereits für den gewünschten Port erfolgreich installiert wurde, kann mit "REMOVE" diese Version von DruckManager entfernt werden. Falls dieses Argument nicht angegeben wird, versucht DruckManager, die gewünschten Einstellungen zu übernehmen. Änderungen werden nur vorgenommen, wenn ein Argument angegeben wurde, die oben genannten Voreinstellungen sind somit hinfällig, außer bei CX_POPUP, das nicht angegeben werden muß, um das Fenster zu öffnen. Das Kopieren in eine Datei kann mit CMD=NO/NEIN ausgeschaltet werden. 2.2. Das Config-File In dem Config-File werden die Drucker-Kommandos festgelegt. Das File kann mit C-Kommentaren versehen werden, d.h. eingeleitet durch "/*" und beendet durch "*/". Die einzelnen Zeilen werden jeweils getrennt untersucht, wobei eine maximale Zeilenlänge von 1024 Zeichen erlaubt ist. Zeilen können in der nächsten Zeile fortgesetzt werden, indem man als letztes Zeichen einer Zeile einen Schrägstrich ("/") setzt. Eine Kommando-Sequenz hat einen Namen, der am Anfang der Zeile stehen muß, durch einen Doppelpunkt beendet wird und maximal 31 Zeichen lang sein darf. Der Doppelpunkt gehört nicht zum Namen. Beispiel: "Seitenlänge einstellen: ..." Nach dem Doppelpunkt folgt eine Reihe von maximal 512 Byte-Werten, die durch Kommata getrennt werden. Leerzeichen und Tabstops werden übersprungen. Die Werte können dezimal, hexadezimal (eingeleitet durch $) oder als Zeichen (eingerahmt durch Hochkommas ' ) angegeben werden. Beispiel: "Seitenlänge einstellen: 27, 'C', $0, .../* EpsonLQ */" Eine besondere Bedeutung hat eine Variable, die einmal in einer Sequenz vorkommen darf. Diese variable Größe wird von DruckManager vor dem Drucken abgefragt, in das richtige Format gebracht und an der gewünschten Stelle in der Sequenz eingefügt. Anhand des Variablennamens in der Zeile unterscheidet DruckManager die folgenden Typen: - Byte-Wert: "VB" einfacher Byte-Wert von 0-255 - 16 Bit : "VLH", "VHL" Word-Wert, d.h. zwei Byte, von 0-65535 Bei "VLH" wird zuerst das Low-Byte und dann das High-Byte gesendet, bei "VHL" gerade andersherum. - String : "VS" Beispiele: "Seitenlänge einst. : 27, 'C', 0, VB /* EpsonLQ */" "Druckkopf bewegen : 27, '$', VLH /* EpsonLQ */" "Text (fett) drucken : 27, 'G', VS, 27, 'H', 10 /* EpsonLQ */" 2.3. Das Fenster von DruckManager DruckManager bietet ein Fenster, in dem über verschiedenen Gadgets und das Menu die Funktionen gewählt werden können. Dieses Fenster erscheint immer dann, wenn das Programm gestartet wird, allerdings nur, wenn nicht "CX_POPUP=no" angegeben wurde. Unter 2.0 kann man das Fenster, wie bei den anderen Commodities auch, durch den Popkey oder das Programm "Exchange" öffnen. Es kann ein Public-Screen angegeben werden, auf dem DruckManager das Fenster öffnet. Dieser Screen wird geöffnet, wenn er noch nicht vorhanden ist. Ob bei jedem Öffnen des Fensters der Public-Screen verwendet wird, läßt sich ebenfalls einstellen. Wenn der Public-Screen nicht immer verwendet werden soll, wird später das Fenster auf dem obersten Screen geöffnet, sofern dies ein Public-Screen ist. So kann man z.B. auf Tastendruck DruckManager immer auf den Screen bringen, auf dem man gerade arbeitet. DruckManager verwendet für alle Texte, auch in den Menus und des Gadgets, den für einen Screen voreingestellten Font. Die Größe des Fensters und der Gadgets wird entsprechend der Font-Größe angepaßt. Dies funktioniert in der Regel auch bei Proportional-Fonts, ohne daß es zu Überschneidungen kommt. Wenn Sie allerdings einen bezogen auf die Screen-Größe zu großen Font wählen, kann DruckManager sein Fenster nicht mit diesem Font öffnen, sondern verwendet denselben Font in der maximal möglichen Größe, die gerade noch auf den Screen paßt. Man kann das Fenster auch ausschalten, indem man den Menupunkt "Verbergen" oder das Fensterschließsymbol anwählt oder, OS 2.0 vorausgesetzt, das "Exchange"-Programm verwendet. Unter 1.3 muß man dann allerdings DruckManager noch einmal starten, um wieder ein Fenster zu bekommen. 2.4. Menus, Gadgets, Commodity Wie bisher wohl schon deutlich wurde, läßt sich DruckManager auf verschiedenen Wegen steuern. Ob Sie eher die Menus oder die Gadgets bevorzugen, bleibt Ihnen überlassen. Meist ist die Bedienung intuitiv genug, und die Menu-Bezeichnungen entsprechen denen der Gadgets, so daß im nächsten Kapitel nur noch auf die Features selbst und nicht mehr auf die Bedienung eingegangen wird. Erwähnenswert ist hier nur die Art, wie DruckManager sich als Commodity verhält: Im Programm Exchange kann mit "Show" und "Hide" das Fenster geöffnet, bzw. geschlossen werden. Der Popkey öffnet ebenfalls das Fenster. Mit "Disable" wird DruckManager auf "Sofort Drucken" gestellt und verhält sich damit so, als wäre er nicht installiert. Bei "Enable" schaltet sich das Puffern ein. Mit "Kill" schließlich wird das Programm aus dem Speicher entfernt. 2.5. Entfernen Das Entfernen von DruckManager ist nicht jederzeit möglich: Falls DruckManager einen eigenen Public-Screen geöffnet hat, muß es diesen auch schließen. Das ist jedoch nicht möglich, wenn noch ein anderes Programm dort ein Fenster geöffnet hat. Wenn dies der Fall ist, bekommen Sie in einem Requester die Möglichkeit, noch einmal zu versuchen, den Public-Screen zu schließen, nachdem sie dort alle Fenster geschlossen haben, und dann zu beenden, oder DruckManager noch nicht zu beenden. Wenn Sie DruckManager beenden wollen, solange noch Daten im Puffer sind, werden Sie gewarnt und haben die Wahl, entweder alle Daten im Puffer zu löschen und dann zu beenden oder noch nicht zu beenden. Schließlich kann es noch sein, daß ein anderes Programm dieselben Vektoren in dem jeweiligen Device gepatcht hat wie DruckManager. Dann ist das Entfernen von DruckManager nicht möglich, ohne einen Absturz zu riskieren. Sie müssen zuerst das andere Programm entfernen. 3. Features von DruckManager Das Konzept von DruckManager sieht für alle Daten, die ein Anwendungsprogramm an den Drucker schickt, drei Stationen vor, wobei Sie an jeder Station in dieser Datenschlange Einfluß auf die Daten und das Verhalten von DruckManager nehmen können. Daten für den Drucker treffen immer in Blöcken ein, es läßt sich auf dem Amiga dabei nicht unterscheiden, welche Blöcke zusammen gehören. DruckManager arbeitet daher immer Block-orientiert und nicht "Job"-orientiert wie andere, ähnliche Programme. Seien Sie vorsichtig, wenn Sie DruckManager Daten löschen lassen, denn es könnte sein, daß ihr Drucker dann im nächsten Block Daten erhält, mit denen er nichts anfangen kann, weil ihm der vorherige Block fehlt. Da einige Programme ihre Daten in sehr kleinen Blöcken an den Drucker schicken und der Verwaltungsaufwand sehr groß werden würde, sammelt DruckManager solche kleinen Blöcke. Sie werden erst in den Puffer übernommen und ausgedruckt, wenn genügend Daten eingetroffen sind oder eine gewiße Zeitspanne ohne neue Daten verstrichen ist. Daher kann sich der Druck-Beginn leicht verzögern, die Leistung insgesamt nimmt jedoch zu. 3.1. Input Alle Daten treffen zunächst bei dieser Station ein. DruckManager bietet hier vier Möglichkeiten, zwischen denen Sie fast jederzeit hin- und herschalten können: - Puffern Bei dieser Option werden die Daten in den internen Puffer übernommen, und das Anwendungsprogramm kann sofort mit seiner Arbeit fortfahren, ohne darauf warten zu müssen, bis die Daten wirklich ausgedruckt wurden. So kann z.B. ein DTP-Programm schon die nächste Seite berechnen, während die Seite noch gedruckt wird. Nur das Schreiben von Daten wird unterstützt. Bei dieser Einstellung ist es daher nicht möglich, Daten von dem jeweiligen Port zu lesen, wie es z.B. Terminal-Programme am seriellen Port machen. - Nirwana Wenn ein Programm Daten an den Drucker schickt, die nicht (mehr) gedruckt werden sollen, können Sie diese Daten auch sofort ins "Nichts" schicken, ohne daß das Anwendungsprogramm etwas davon merkt. Für das Lesen von Daten gelten dieselben Einschränkungen wie beim Puffern. - Sofort Drucken Falls Ihr Programm schon selbst eine Puffer-Möglichkeit bietet, können Sie den Puffer von DruckManager auch ausschalten. Die eintreffenden Daten werden dann sofort an den Drucker geschickt, das Anwendungsprogramm muß dann allerdings warten, bis der Drucker alle Daten verarbeitet hat. Wenn Sie diese Option wählen, muß der Puffer leer sein, bevor die neuen Daten ausgedruckt werden können, da die Reihenfolge der Daten erhalten bleiben sollte. Diese Einstellung sollten Sie wählen, wenn Sie etwa ein Modem am seriellen Port ansprechen wollen, ohne DruckManager zu entfernen. Die anderen Features von DruckManager können nicht mehr verwendet werden. Diese drei genannten Möglichkeiten schließen einander aus. Parallel zu jeder dieser Optionen können die Daten jedoch auch noch in ein File geschrieben werden. Wenn Sie "in File" anwählen, erscheint zuerst ein File-Requester, mit dem Sie ein File auswählen können. Falls das File schon existiert, können Sie in einem Requester auswählen, ob das File überschrieben, die Daten angehängt oder abgebrochen werden soll. Dieses File bleibt geöffnet, bis Sie diese Option wieder deaktivieren. Solange können Sie diese Datei nur mit Einschränkungen verwenden. Diese Datei wird bei DruckManager meist einfach "CMD-File" genannt, in Anlehnung an den Workbench-Befehl CMD, der ähnlich funktioniert. 3.2. Puffer Wenn Sie bei Input "Puffer" angewählt haben, verwaltet DruckManager eine Liste von Datenblöcken. Neue Datenblöcke werden an das Ende dieser Liste angehängt, während beim Drucken immer zuerst der Datenblock am Anfang ausgedruckt wird. Falls die Daten aus irgendeinem Grund (Speichermangel, Kapazität der Festplatte erschöpft, etc.) nicht gepuffert werden können, gehen trotzdem keine Daten verloren. Der Datenblock, der nicht untergebracht werden konnte, wird erst dann verarbeitet, wenn die Daten wirklich übernommen werden könne. Bis dahin muß allerdings das Anwenderprogramm warten. Für die Art, wie die Daten zwischengespeichert werden sollen, gibt es zwei Alternative: - RAM Die RAM-Option ist schnell, da hier die Daten in einen für jeden Datenblock neu belegten Speicherbereich kopiert werden, jedoch kann es bei Computern mit kleinem RAM-Ausbau zu Speichermangel kommen. Wenn der Speicher knapp wird, sollten Sie besser auf das Puffern in Files umschalten. Bevor jedoch Speicher zu knapp wird, um z.B. den File-Requester noch zu öffnen, werden Sie von DruckManager auf den Speichermangel hingewiesen. - Files Wenn Sie diese Option gewählt haben - oder DruckManager selbst umschaltet - erscheint zunächst ein File-Requester, in dem Sie ein Verzeichnis auswählen können. In diesem Verzeichnis legt DruckManager für jeden neuen Datenblock ein neues File an und löscht es, nachdem die Daten gedruckt wurden. Nachteil dieser Methode sind die geringere Geschwindigkeit, z.B. bei Disketten, und die Files, die möglicherweise, etwa wegen eines Resets, nicht mehr gelöscht werden konnten. Diese Files müssen dann von Hand gelöscht werden. Falls die Daten im Puffer nicht mehr ausgedruckt werden sollen, können Sie den Puffer mit "Löschen" auch sofort ohne Ausdrucken löschen. Dieses Feature ist besonders in Kombination mit der Input-Einstellung "Nirwana" nützlich. Zum Bereich Puffer gehört auch die grafische Anzeige der Datenmenge im Puffer. Diese Anzeige zeigt in Form zweier Balken einmal die Menge der gesamten Daten und in einer anderen Farbe die Menge der davon bereits gedruckten Daten an. Wieviel der Vollausschlag ist, steht rechts daneben und wird immer der Gesamtdatenmenge angepaßt. 3.3. Output Wenn Daten zwar zum Druck anstehen, aber noch nicht ausgedruckt werden sollen, z.B. weil der Drucker noch nicht richtig eingestellt ist, können Sie mit "Pause" den Ausdruck solange wie nötig anhalten. Dabei wird der Datenblock, der gerade an den Drucker geschickt wird, noch fertig gedruckt. Statt "Pause" können Sie aber auch "Unterbrechen" verwenden, das den Druck sofort abbricht, zumindest soweit dies möglich ist, und dann in den Pause-Modus geht. Daten gehen dabei nicht verloren, wenn Sie also den Pause-Modus wieder ausschalten, wird genau an der Stelle weiter gedruckt, wo abgebrochen wurde. Sollen die Daten auch später nicht mehr gedruckt werden, so kann man mit dem Gadget "Abbrechen + Löschen" gleichzeitig den Druck abbrechen, den Puffer löschen und auf Pause stellen. Fehler beim Ausdruck sind schwerer zu behandeln, da das Anwendungsprogramm nichts von diesen Schwierigkeiten erfährt und vielleicht schon neue Daten in den Puffer geschickt hat. Für den Fall eines Fehlers zeigt Ihnen DruckManager in einem Requester eine ausführliche Fehlerbeschreibung und bietet folgende Reaktionsmöglichkeiten an: - Wiederholen Der Datenblock wird einfach noch einmal an den Drucker geschickt. Das ist z.B. sinnvoll, wenn der Fehler sofort behoben werden kann. - Pause Wenn der Fehler nicht sofort behoben werden kann, können Sie so den Pause-Modus aufrufen. - Löschen Wenn der gesamte Pufferinhalt nicht mehr gebraucht wird, können Sie ihn und den fehlgeschlagenen Block mit "Löschen" auch sofort löschen. - Abbrechen Mit "Abbrechen" gehen nur die Daten dieses Datenblocks verloren. Alle übrigen Blöcke werden weiter an den Drucker geschickt, als wäre kein Fehler aufgetreten. 3.4. Drucker-Kommandos Die meisten Drucker werden über die sogenannten ESC-Sequenzen gesteuert. Damit kann man bei vielen Druckern weit mehr Einstellungen vornehmen, als von der Workbench vorgesehen sind, z.B. Wählen einer bestimmten Schriftart, der Seitenlänge, der Druckgeschwindigkeit etc.. Welche ESC-Sequenzen Ihr Drucker unterstützt, finden Sie in Ihren Drucker-Handbuch. Häufig enthält eine solche Sequenz auch ein variables Argument. DruckManager bietet eine komfortable Möglichkeit, solche Sequenzen an den Drucker zu schicken. Dazu müssen Sie zuerst einmal in einem Config-File festlegen, welche Sequenzen ihr Drucker unterstützt. Wie das geht, ist in Kapitel 2.2. beschrieben. Wenn Sie beim Starten von DruckManager ein solches Config-File mit Sequenz-Definitionen angeben, dann bekommen Sie in dem großen Fenster von DruckManager diese Liste in einem Listview-Gadget angezeigt. Hier können Sie eine bestimmte Sequenz auswählen. Falls diese Sequenz ein Argument enthält, können Sie dieses in dem String-Gadget daneben eintragen. Wie diese Eingabe interpretiert wird, hängt von der Art des Arguments ab (siehe 2.2.). Zahlenwerte können wie in der Sprache C eingegeben werden: Hexadezimal mit einem "0x" davor, oktal mit einer 0 als erste Ziffer, dezimal ist dann alles andere. Mit dem Gadget "Senden mit Datenschlange" können Sie die Sequenz an den Drucker schicken. Dies geschieht, indem die Daten als neuer Block an die Input-Station geschickt wird. Die Sequenz wird also auch in ein CMD-File geschrieben und langt erst nach den bisher gepufferten Daten beim Drucker an, bzw. wird gar nicht ausgedruckt, wenn bei Input auf Nirwana gestellt wurde. Da das nicht immer erwünscht ist, kann die Sequenz auch so bald wie möglich direkt an den Drucker geschickt werden, indem sie am Anfang der Daten-Liste eingefügt wird, ohne in das CMD-File geschrieben zu werden. Dazu wählen Sie das Gadget "Sofort Senden".